/*
    ChibiOS - Copyright (C) 2017 Wim Lewis

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

#ifndef _BOARD_H_
#define _BOARD_H_

/*
 * Setup for the PJRC Teensy 3.5 board.
 */

/*
 * Board identifier
 */
#define BOARD_PJRC_TEENSY_3_5
#define BOARD_NAME                  "PJRC Teensy 3.5"

/* External 16 MHz crystal */
#define KINETIS_XTAL_FREQUENCY      16000000UL

/* Use internal capacitors for the crystal */
#define KINETIS_BOARD_OSCILLATOR_SETTING OSC_CR_SC8P|OSC_CR_SC2P|OSC_CR_ERCLKEN

/*
 * MCU type
 */
#define K64FX512

/*
 * IO pin assignments
 */
#define TEENSY_PIN25		5
#define TEENSY_PIN3		12
#define TEENSY_PIN4		13
#define TEENSY_PIN26		14
#define TEENSY_PIN27		15
#define TEENSY_PIN28		16
#define TEENSY_PIN39		17
#define TEENSY_PIN42		26
#define TEENSY_PIN40		28
#define TEENSY_PIN41		29

#define TEENSY_PIN40_IOPORT	IOPORT1
#define TEENSY_PIN41_IOPORT	IOPORT1
#define TEENSY_PIN42_IOPORT	IOPORT1
#define TEENSY_PIN3_IOPORT	IOPORT1
#define TEENSY_PIN4_IOPORT	IOPORT1
#define TEENSY_PIN25_IOPORT	IOPORT1
#define TEENSY_PIN26_IOPORT	IOPORT1
#define TEENSY_PIN27_IOPORT	IOPORT1
#define TEENSY_PIN28_IOPORT	IOPORT1
#define TEENSY_PIN39_IOPORT	IOPORT1

#define TEENSY_PIN16		0
#define TEENSY_PIN17		1
#define TEENSY_PIN19		2
#define TEENSY_PIN18		3
#define TEENSY_PIN49		4
#define TEENSY_PIN50		5
#define TEENSY_PIN31		10
#define TEENSY_PIN32		11
#define TEENSY_PIN0		16
#define TEENSY_PIN1		17
#define TEENSY_PIN29		18
#define TEENSY_PIN30		19
#define TEENSY_PIN43		20
#define TEENSY_PIN46		21
#define TEENSY_PIN44		22
#define TEENSY_PIN45		23

#define TEENSY_PIN49_IOPORT	IOPORT2
#define TEENSY_PIN50_IOPORT	IOPORT2
#define TEENSY_PIN43_IOPORT	IOPORT2
#define TEENSY_PIN44_IOPORT	IOPORT2
#define TEENSY_PIN45_IOPORT	IOPORT2
#define TEENSY_PIN46_IOPORT	IOPORT2
#define TEENSY_PIN0_IOPORT	IOPORT2
#define TEENSY_PIN1_IOPORT	IOPORT2
#define TEENSY_PIN29_IOPORT	IOPORT2
#define TEENSY_PIN30_IOPORT	IOPORT2
#define TEENSY_PIN31_IOPORT	IOPORT2
#define TEENSY_PIN32_IOPORT	IOPORT2
#define TEENSY_PIN16_IOPORT	IOPORT2
#define TEENSY_PIN17_IOPORT	IOPORT2
#define TEENSY_PIN19_IOPORT	IOPORT2
#define TEENSY_PIN18_IOPORT	IOPORT2

#define TEENSY_PIN15		0
#define TEENSY_PIN22		1
#define TEENSY_PIN23		2
#define TEENSY_PIN9		3
#define TEENSY_PIN10		4
#define TEENSY_PIN13		5
#define TEENSY_PIN11		6
#define TEENSY_PIN12		7
#define TEENSY_PIN35		8
#define TEENSY_PIN36		9
#define TEENSY_PIN37		10
#define TEENSY_PIN38		11

#define TEENSY_PIN9_IOPORT	IOPORT3
#define TEENSY_PIN10_IOPORT	IOPORT3
#define TEENSY_PIN11_IOPORT	IOPORT3
#define TEENSY_PIN12_IOPORT	IOPORT3
#define TEENSY_PIN35_IOPORT	IOPORT3
#define TEENSY_PIN36_IOPORT	IOPORT3
#define TEENSY_PIN37_IOPORT	IOPORT3
#define TEENSY_PIN38_IOPORT	IOPORT3
#define TEENSY_PIN13_IOPORT	IOPORT3
#define TEENSY_PIN15_IOPORT	IOPORT3
#define TEENSY_PIN22_IOPORT	IOPORT3
#define TEENSY_PIN23_IOPORT	IOPORT3

#define TEENSY_PIN2		0
#define TEENSY_PIN14		1
#define TEENSY_PIN7		2
#define TEENSY_PIN8		3
#define TEENSY_PIN6		4
#define TEENSY_PIN20		5
#define TEENSY_PIN21		6
#define TEENSY_PIN5		7
#define TEENSY_PIN47		8
#define TEENSY_PIN48		9
#define TEENSY_PIN55		11
#define TEENSY_PIN53		12
#define TEENSY_PIN52		13
#define TEENSY_PIN51		14
#define TEENSY_PIN54		15

#define TEENSY_PIN51_IOPORT	IOPORT4
#define TEENSY_PIN52_IOPORT	IOPORT4
#define TEENSY_PIN53_IOPORT	IOPORT4
#define TEENSY_PIN54_IOPORT	IOPORT4
#define TEENSY_PIN55_IOPORT	IOPORT4
#define TEENSY_PIN47_IOPORT	IOPORT4
#define TEENSY_PIN48_IOPORT	IOPORT4
#define TEENSY_PIN2_IOPORT	IOPORT4
#define TEENSY_PIN5_IOPORT	IOPORT4
#define TEENSY_PIN6_IOPORT	IOPORT4
#define TEENSY_PIN7_IOPORT	IOPORT4
#define TEENSY_PIN8_IOPORT	IOPORT4
#define TEENSY_PIN14_IOPORT	IOPORT4
#define TEENSY_PIN20_IOPORT	IOPORT4
#define TEENSY_PIN21_IOPORT	IOPORT4

#define TEENSY_PIN56		10
#define TEENSY_PIN57		11
#define TEENSY_PIN33		24
#define TEENSY_PIN34		25
#define TEENSY_PIN24		26

#define TEENSY_PIN56_IOPORT	IOPORT5
#define TEENSY_PIN57_IOPORT	IOPORT5
#define TEENSY_PIN24_IOPORT	IOPORT5
#define TEENSY_PIN33_IOPORT	IOPORT5
#define TEENSY_PIN34_IOPORT	IOPORT5

#define LINE_PIN0           PAL_LINE(TEENSY_PIN0_IOPORT, TEENSY_PIN0)
#define LINE_PIN1           PAL_LINE(TEENSY_PIN1_IOPORT, TEENSY_PIN1)
#define LINE_PIN2           PAL_LINE(TEENSY_PIN2_IOPORT, TEENSY_PIN2)
#define LINE_PIN3           PAL_LINE(TEENSY_PIN3_IOPORT, TEENSY_PIN3)
#define LINE_PIN4           PAL_LINE(TEENSY_PIN4_IOPORT, TEENSY_PIN4)
#define LINE_PIN5           PAL_LINE(TEENSY_PIN5_IOPORT, TEENSY_PIN5)
#define LINE_PIN6           PAL_LINE(TEENSY_PIN6_IOPORT, TEENSY_PIN6)
#define LINE_PIN7           PAL_LINE(TEENSY_PIN7_IOPORT, TEENSY_PIN7)
#define LINE_PIN8           PAL_LINE(TEENSY_PIN8_IOPORT, TEENSY_PIN8)
#define LINE_PIN9           PAL_LINE(TEENSY_PIN9_IOPORT, TEENSY_PIN9)
#define LINE_PIN10          PAL_LINE(TEENSY_PIN10_IOPORT, TEENSY_PIN10)
#define LINE_PIN11          PAL_LINE(TEENSY_PIN11_IOPORT, TEENSY_PIN11)
#define LINE_PIN12          PAL_LINE(TEENSY_PIN12_IOPORT, TEENSY_PIN12)
#define LINE_PIN13          PAL_LINE(TEENSY_PIN13_IOPORT, TEENSY_PIN13)
#define LINE_PIN14          PAL_LINE(TEENSY_PIN14_IOPORT, TEENSY_PIN14)
#define LINE_PIN15          PAL_LINE(TEENSY_PIN15_IOPORT, TEENSY_PIN15)
#define LINE_PIN16          PAL_LINE(TEENSY_PIN16_IOPORT, TEENSY_PIN16)
#define LINE_PIN17          PAL_LINE(TEENSY_PIN17_IOPORT, TEENSY_PIN17)
#define LINE_PIN18          PAL_LINE(TEENSY_PIN18_IOPORT, TEENSY_PIN18)
#define LINE_PIN19          PAL_LINE(TEENSY_PIN19_IOPORT, TEENSY_PIN19)
#define LINE_PIN20          PAL_LINE(TEENSY_PIN20_IOPORT, TEENSY_PIN20)
#define LINE_PIN21          PAL_LINE(TEENSY_PIN21_IOPORT, TEENSY_PIN21)
#define LINE_PIN22          PAL_LINE(TEENSY_PIN22_IOPORT, TEENSY_PIN22)
#define LINE_PIN23          PAL_LINE(TEENSY_PIN23_IOPORT, TEENSY_PIN23)
#define LINE_PIN24          PAL_LINE(TEENSY_PIN24_IOPORT, TEENSY_PIN24)
#define LINE_PIN25          PAL_LINE(TEENSY_PIN25_IOPORT, TEENSY_PIN25)
#define LINE_PIN25          PAL_LINE(TEENSY_PIN25_IOPORT, TEENSY_PIN25)
#define LINE_PIN26          PAL_LINE(TEENSY_PIN26_IOPORT, TEENSY_PIN26)
#define LINE_PIN27          PAL_LINE(TEENSY_PIN27_IOPORT, TEENSY_PIN27)
#define LINE_PIN28          PAL_LINE(TEENSY_PIN28_IOPORT, TEENSY_PIN28)
#define LINE_PIN29          PAL_LINE(TEENSY_PIN29_IOPORT, TEENSY_PIN29)
#define LINE_PIN30          PAL_LINE(TEENSY_PIN30_IOPORT, TEENSY_PIN30)
#define LINE_PIN31          PAL_LINE(TEENSY_PIN31_IOPORT, TEENSY_PIN31)
#define LINE_PIN32          PAL_LINE(TEENSY_PIN32_IOPORT, TEENSY_PIN32)
#define LINE_PIN33          PAL_LINE(TEENSY_PIN33_IOPORT, TEENSY_PIN33)
#define LINE_PIN34          PAL_LINE(TEENSY_PIN34_IOPORT, TEENSY_PIN34)
#define LINE_PIN35          PAL_LINE(TEENSY_PIN35_IOPORT, TEENSY_PIN35)
#define LINE_PIN36          PAL_LINE(TEENSY_PIN36_IOPORT, TEENSY_PIN36)
#define LINE_PIN37          PAL_LINE(TEENSY_PIN37_IOPORT, TEENSY_PIN37)
#define LINE_PIN38          PAL_LINE(TEENSY_PIN38_IOPORT, TEENSY_PIN38)
#define LINE_PIN39          PAL_LINE(TEENSY_PIN39_IOPORT, TEENSY_PIN39)
#define LINE_PIN40          PAL_LINE(TEENSY_PIN40_IOPORT, TEENSY_PIN40)
#define LINE_PIN41          PAL_LINE(TEENSY_PIN41_IOPORT, TEENSY_PIN41)
#define LINE_PIN42          PAL_LINE(TEENSY_PIN42_IOPORT, TEENSY_PIN42)
#define LINE_PIN43          PAL_LINE(TEENSY_PIN43_IOPORT, TEENSY_PIN43)
#define LINE_PIN44          PAL_LINE(TEENSY_PIN44_IOPORT, TEENSY_PIN44)
#define LINE_PIN45          PAL_LINE(TEENSY_PIN45_IOPORT, TEENSY_PIN45)
#define LINE_PIN46          PAL_LINE(TEENSY_PIN46_IOPORT, TEENSY_PIN46)
#define LINE_PIN47          PAL_LINE(TEENSY_PIN47_IOPORT, TEENSY_PIN47)
#define LINE_PIN48          PAL_LINE(TEENSY_PIN48_IOPORT, TEENSY_PIN48)
#define LINE_PIN49          PAL_LINE(TEENSY_PIN49_IOPORT, TEENSY_PIN49)
#define LINE_PIN50          PAL_LINE(TEENSY_PIN50_IOPORT, TEENSY_PIN50)
#define LINE_PIN51          PAL_LINE(TEENSY_PIN51_IOPORT, TEENSY_PIN51)
#define LINE_PIN52          PAL_LINE(TEENSY_PIN52_IOPORT, TEENSY_PIN52)
#define LINE_PIN53          PAL_LINE(TEENSY_PIN53_IOPORT, TEENSY_PIN53)
#define LINE_PIN54          PAL_LINE(TEENSY_PIN54_IOPORT, TEENSY_PIN54)
#define LINE_PIN55          PAL_LINE(TEENSY_PIN55_IOPORT, TEENSY_PIN55)
#define LINE_PIN56          PAL_LINE(TEENSY_PIN56_IOPORT, TEENSY_PIN56)
#define LINE_PIN57          PAL_LINE(TEENSY_PIN57_IOPORT, TEENSY_PIN57)

#define LINE_LED            LINE_PIN13

#if !defined(_FROM_ASM_)
#ifdef __cplusplus
extern "C" {
#endif
  void boardInit(void);
#ifdef __cplusplus
}
#endif
#endif /* _FROM_ASM_ */

#endif /* _BOARD_H_ */

